/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bean;

import datos.Programa;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import negocio.GestorProgramaLocal;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */

public class ProgramaBean {

    @EJB(beanName="GestorProgramaBean")
    private GestorProgramaLocal gestorProgramaBean;
    
    private String nombre;
    private String descripcion;
    private Date fechaInicio = new Date(System.currentTimeMillis());
    private Date fechaFin = new Date(System.currentTimeMillis());
    private int id;
    private boolean mostrarAgregar = false;
    private boolean mostrarModificar = false;

    /**
     *
     */
    public ProgramaBean() {
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the fechaInicio
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    /**
     * @param fechaInicio the fechaInicio to set
     */
    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    /**
     * @return the fechaFin
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * @param fechaFin the fechaFin to set
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the mostrarAgregar
     */
    public boolean isMostrarAgregar() {
        return mostrarAgregar;
    }

    /**
     * @param mostrarAgregar the mostrarAgregar to set
     */
    public void setMostrarAgregar(boolean mostrarAgregar) {
        this.mostrarAgregar = mostrarAgregar;
    }

    /**
     * @return the mostrarModificar
     */
    public boolean isMostrarModificar() {
        return mostrarModificar;
    }

    /**
     * @param mostrarModificar the mostrarModificar to set
     */
    public void setMostrarModificar(boolean mostrarModificar) {
        this.mostrarModificar = mostrarModificar;
    }

    /**
     *
     * @return
     */
    public List getProgramas() {
        return this.gestorProgramaBean.consultarPrograma();
    }

    /**
     *
     * @param e
     */
    public void guardarProgramaOyente(ActionEvent e){
        this.setDescripcion("");
        this.setNombre("");
        this.setFechaInicio(fechaInicio);
        this.setFechaFin(fechaFin);
        this.setMostrarAgregar(true);
        this.setMostrarModificar(false);
    }

    /**
     *
     * @return
     */
    public String guardarPrograma() {
        Programa to = new Programa();
        to.setNombre(nombre.toUpperCase());
        to.setDescripcion(descripcion.toUpperCase());

        to.setFechaInicio(fechaInicio);
        to.setFechaFin(fechaFin);
        boolean existe = this.gestorProgramaBean.existeNombrePrograma(to);
        if (!existe) {
            this.gestorProgramaBean.agregarPrograma(to);
            this.mostrarAgregar = false;
            this.mostrarModificar = false;
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Programa guardado con exito", ""));
        } else {
            this.setNombre("");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ya existe un Programa con ese nombre", ""));
        }

        return null;
        //Como idea podriamos hacer que navegue a una pagina de error si al agregar hubo un error
    }

    /**
     *
     * @param e
     */
    public void modificarProgramaOyente(ActionEvent e){
            this.setDescripcion("");
            this.setNombre("");
            this.setMostrarAgregar(false);
            this.setMostrarModificar(true);
            UIParameter component = (UIParameter) e.getComponent().findComponent("idModificar");
            this.setId((Integer) Integer.parseInt(component.getValue().toString()));
            component = (UIParameter) e.getComponent().findComponent("nombre");
            this.setNombre(component.getValue().toString());
            component = (UIParameter) e.getComponent().findComponent("descripcion");
            this.setDescripcion(component.getValue().toString());
            
            component = (UIParameter) e.getComponent().findComponent("fechaInicio");
            this.setFechaInicio((Date)component.getValue());

            component = (UIParameter) e.getComponent().findComponent("fechaFin");
            this.setFechaFin((Date)component.getValue());
        }

    /**
     *
     * @return
     */
    public String modificarPrograma() {
        Programa to = new Programa();
        to.setId(this.getId());
        to.setNombre(this.getNombre().toUpperCase());
        to.setDescripcion(this.getDescripcion().toUpperCase());
        to.setFechaInicio(this.getFechaInicio());
        to.setFechaFin(this.getFechaFin());
        boolean existe = this.gestorProgramaBean.existeNombreProgramaModificar(to);
        if (!existe) {
            this.gestorProgramaBean.modificarPrograma(to);
            this.mostrarAgregar = false;
            this.mostrarModificar = false;
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Programa modificado con exito", ""));
        } else {
            this.setNombre("");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ya existe un Programa con ese nombre", ""));
        }
        return null;
    }

    /**
     *
     * @param e
     */
    public void eliminarProgramaOyente(ActionEvent e){
        UIParameter component = (UIParameter) e.getComponent().findComponent("idBorrar");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @return
     */
    public String eliminarPrograma() {
        FacesContext context = FacesContext.getCurrentInstance();
        if (!this.gestorProgramaBean.programaFueAsignadoObras(id)) {
            Programa to = new Programa();
            to.setId(id);
            this.gestorProgramaBean.eliminarPrograma(to);
            context.addMessage(null, new FacesMessage("Programa eliminado con exito", ""));
        } else {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No puede eliminar ese Programa porque fue asignado, por lo menos, a una Obra Pública", ""));
        }
        return null;
    }

    /**
     *
     * @param e
     */
    public void cancelarOyente(ActionEvent e) {
        this.setNombre("");
        this.setDescripcion("");
        this.setFechaInicio(new Date(System.currentTimeMillis()));
        this.setFechaFin(new Date(System.currentTimeMillis()));
        this.setMostrarAgregar(false);
        this.setMostrarModificar(false);
    }






}





